from neo4j_db.config import (
    graph,
    node_matcher,
    relationship_matcher
)

def matchNode(nodeType = None, name = None, limit = None):
    # limit为None的时候，是不会报错的
    # name为None的时候,会查不出东西,因此需要判断
    # nodeType为None的时候,也需要判断
    if name == None:
        nodeMatch = node_matcher.match(nodeType).limit(limit)
    else:
        if nodeType == None:
            nodeMatch = node_matcher.match(name=name).limit(limit)
        else:
            nodeMatch = node_matcher.match(nodeType, name=name).limit(limit)
    nodes = nodeMatch.all()
    return nodes


# 根据结点返回相应的边
# 1.为单节点的时候,匹配该节点所有相关边
# 2.为双结点的时候,匹配这两个结点的所有相关边
def getRelationshipByTwoNode(node1, node2 = None):
    # 以该节点出发，以及其他节点到该节点的相关边
    relateToOtherMatch = relationship_matcher.match(nodes=[node1, node2])
    relateFromOtherMatch = relationship_matcher.match(nodes=[node2, node1])
    # 两个列表合并成一个列表
    relationships = relateToOtherMatch.all() + relateFromOtherMatch.all()
    return relationships


# 通过匹配关键字
def matchNodeByKeyword(nodeType, keyword):
    # 使用字符串格式化确保正确转义输入的关键字
    query = f"_.keywords CONTAINS '{keyword}'"
    matchNodes = node_matcher.match(nodeType).where(query)
    nodes = matchNodes.all()
    return nodes

